﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ITProject.Repository.Abstract;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace ITProject.WebUI.Models.Message
{
    /// <summary>
    /// Klasa modelu wysyłania wiadomości.
    /// Autor: Jakub Szatkowski
    /// </summary>
    public class MessageSendViewModel
    {
        // wyświetlane w formularzu
        [Required(ErrorMessage="Tytuł jest wymagany")]
        [MaxLength(50, ErrorMessage="Temat wiadomosci moze mieć maksymalnie 50 znaków")]
        [Display(Name="Temat")]
        public String Subject { get; set; }
        [Required(ErrorMessage="Treść jest wymagana")]
        [Display(Name="Treść")]
        [DataType(DataType.MultilineText)]
        public String Text { get; set; }
        [Display(Name="Potwierdzenie przeczytania")]
        public bool NeedReadConfirmation { get; set; }
        
        // wyświetlane w widoku
        [HiddenInput(DisplayValue = false)]
        public string Receiver { get; set; }

        // uzupełnione przez metode kontrolera
        [HiddenInput(DisplayValue = false)]
        public int IdSender { get; set; }
        [HiddenInput(DisplayValue = false)]
        public string actionResult { get; set; }
        [HiddenInput(DisplayValue = false)]
        public string controllerResult { get; set; }
        [HiddenInput(DisplayValue = false)]
        public object parameter { get; set; }

        /// <summary>
        /// Metoda konwertująca model widokowy wysyłania wiadomości do encji wiadomości.
        /// Autor: Jakub Szatkowski
        /// </summary>
        /// <param name="viewModel">Model widokowy wiadomości.</param>
        /// <returns>Wiadomość.</returns>
        public static ITProject.Domain.Entities.Message Convert(MessageSendViewModel viewModel,IUserRepository userRepo)
        {
            ITProject.Domain.Entities.Message message = new ITProject.Domain.Entities.Message();
            message.ReadConfrimation = viewModel.NeedReadConfirmation;
            message.Readed = false;
            message.Receiver = userRepo.GetUserByLogin(viewModel.Receiver).Id;
            message.Sender = viewModel.IdSender;
            message.Text = viewModel.Text;
            message.Subject = viewModel.Subject;
            return message;
        }
    }
}